package com.solution.admin.order.service;

import java.util.List;
import java.util.Map;

import com.solution.admin.order.entity.OrderEntity;
import com.solution.admin.order.entity.OrderLogEntity;
import com.solution.admin.order.entity.OrderPayEntity;
import com.solution.admin.order.entity.OrderStatisticsEntity;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.pc.order.entity.CustomerOrderStatisticsEntity;

/**
 * 订单信息接口service接口层
 * @author lilp
 * @date 2017-09-14 23:35:39
 */
public interface OrderService {

	/**
	 * 保存订单信息
	 * @param orderEntity 订单信息实体
	 * @return Long 返回插入订单信息记录ID
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public long saveOrder(OrderEntity orderEntity);
	
	
	/**
	 * 删除订单信息
	 * @param 
	 * @return int 返回删除记录条数
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public int deleteOrderById(long id);
	
	
	/**
	 * 根据ID查询订单信息
	 * @param id 订单信息id
	 * @return OrderEntity 订单信息对象
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public OrderEntity getOrderById(Long id);

	/**
	 * 更新订单信息
	 * @param OrderEntity 订单信息对象
	 * @return int 更新是否成功，>1代表更新成功
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public int updateOrder(OrderEntity orderEntity);

	/**
	 * 分页查询订单信息
	 * @param pageParam 分页参数
	 * @param paramMap 查询参数
	 * @return PageBean 分页参数和分页数据
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public PageBean listOrderPage(PageParam pageParam, Map<String, Object> paramMap);
	
	
	/**
	 * 查询发货单列表
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	public PageBean listOrderDeliveryBillPage(PageParam pageParam, Map<String, Object> paramMap);
	
	
	/**
	 * 分页查询待确认的付款凭证列表
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	public PageBean listConfirmPayOrderPage(PageParam pageParam, Map<String, Object> paramMap);
	
	
	/**
	 * 根据条件查询订单信息
	 * @param param
	 * @return 订单信息列表
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public List<OrderEntity> listOrder(Map<String, Object> param);


	/**
	 * 订单调价操作
	 * @param param
	 * @return
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public int adjustOrderPrice(Map<String, Object> param);


	/**
	 * 审核订单
	 * @param param
	 * @return
	 */
	public int approveOrder(Map<String, Object> param);

	
	/**
	 * 取消订单
	 * @param param
	 * @return
	 */
	public int cancelOrder(Map<String, Object> param);

	/**
	 * 确认订单合同
	 * @param param
	 * @return
	 */
	public int confirmOrderContract(Map<String, Object> param);

	/**
	 * 提交订单
	 * @param param
	 * @return
	 */
	public int commitOrder(Map<String, Object> param);

	/**
	 * 更新订单支付状态
	 * @param payParam
	 * @return
	 */
	public int updateOrderStatus(Map<String, Object> payParam);

	/**
	 * 查询首页客户订单数量统计
	 * @param param
	 * @return
	 */
	public List<CustomerOrderStatisticsEntity> listCustomerOrderStatistics( Map<String, Object> param);

	/**
	 * 查询我的订单
	 * @param pageParam
	 * @param paramMap
	 * @return
	 * @author llp
	 */
	public PageBean listMyOrderPage(PageParam pageParam,Map<String, Object> paramMap);

	/**
	 * 全部签收订单
	 * @param param
	 * @return
	 */
	public int signFullOrder(Map<String, Object> param);
	
	/**
	 * 根据订单编号获取订单
	 * @param orderCode
	 * @return
	 * @author xkl
	 * @date 2017年11月21日 下午4:28:33
	 */
	public OrderEntity getOrderByCode(String orderCode);
	
	/**
	 * 完成订单支付
	 * @param order
	 * @param orderPay
	 * @return
	 * @author xkl
	 * @date 2017年11月22日 下午3:43:27
	 */
	public int commitOrderPay(OrderEntity order, OrderPayEntity orderPay, OrderLogEntity orderLog);

	/**
	 * 上传订单合同
	 * @param param
	 * @return
	 * @author llp
	 */
	public int uploadOrderContract(Map<String, Object> param);

	/**
	 * 签收发货单
	 * @param param
	 * @return
	 */
	public int signHalfOrder(Map<String, Object> param);


	/**
	 * 查询个人订单状态统计数量
	 * @param param
	 * @return
	 * @author llp
	 */
	public OrderEntity listOrderStatusCount(Map<String, Object> param);
	
	/**
	 * 确认核销订单
	 * @param param
	 * @return
	 * @author xkl
	 * @date 2017年12月23日 上午10:43:13
	 */
	public Integer confirmVerifyOrder(Map<String, Object> param);
	
	/**
	 * 查询订单数据
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月2日 下午4:31:13
	 */
	public Map<String, Object> queryOrderData(Map<String, Object> paramMap);
	
	/**
	 * 查询订单数据列表
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月5日 下午3:26:57
	 */
	public List<Object> queryOrderDataList(Map<String, Object> paramMap);
	
	/**
	 * 查询待付款、待审核、待发货、代签收4种状态订单数量
	 * @return
	 * @author xkl
	 * @date 2018年1月2日 下午4:56:01
	 */
	public Map<String, Object> queryOrderStatusSum();
	
	/**
	 * 根据状态获取订单数量<br>
	 * （如果参数为空，则返回所有订单数量）
	 * 
	 * @param orderStatus
	 * @return int
	 * @author xu_cc
	 * @throws Exception
	 *             exception
	 * @Date 创建时间：2018年1月2日 上午11:53:11
	 */
	public int getOrderCount(String orderStatus);
	
	/**
	 * 结束过期订单
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月6日 下午4:47:19
	 */
	public Integer closeExpiredOrder(Map<String, Object> paramMap);
	
	/**
	 * 保存交易流水
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月23日 下午2:26:46
	 */
	public int saveOrderTrade(Map<String, Object> paramMap);
	
	/**
	 * 根据交易流水号获取订单号
	 * @param outTradeNo
	 * @return
	 * @author xkl
	 * @date 2018年1月23日 下午2:27:35
	 */
	public String getOrderCodeByOutTradeNo(String outTradeNo);
	
	/**
	 * 查询业务员订单数量
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年2月12日 下午4:05:39
	 */
	public Integer countSalesmanOrderSum(Map<String, Object> paramMap);
	
	/**
	 * 根据id集合查询用户订单统计信息
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年5月16日 下午2:47:29
	 */
	public Map<Long, Map<String,Object>> listUsersCustomerOrderInfo(Map<String, Object> paramMap);

	/**
	 * 自动签收订单
	 * @param param
	 * @return
	 */
	public int autoSign(Map<String, Object> param);


	/**
	 * 查询订单数量及金额统计
	 * @param paramMap
	 * @return
	 */
	public OrderStatisticsEntity selectOrderStatistics(Map<String, Object> paramMap);
}
